// 管理员身份验证相关工具函数

/**
 * 检查管理员token是否有效
 * @returns boolean
 */
export function isAdminTokenValid(): boolean {
  try {
    const adminInfo = localStorage.getItem('adminInfo')
    const adminExpire = localStorage.getItem('adminExpire')
    
    if (adminInfo && adminExpire) {
      const admin = JSON.parse(adminInfo)
      const expire = Number(adminExpire)
      
      // 检查token、role和过期时间
      return !!(admin.token && admin.role === 1 && Date.now() < expire)
    }
  } catch (e) {
    console.warn('检查管理员token有效性失败:', e)
  }
  return false
}

/**
 * 检查管理员是否已登录且有权限
 * @returns boolean
 */
export function isAdminLoggedIn(): boolean {
  return isAdminTokenValid()
}

/**
 * 获取当前管理员token
 * @returns string
 */
export function getAdminToken(): string {
  try {
    const adminInfo = localStorage.getItem('adminInfo')
    if (adminInfo) {
      const admin = JSON.parse(adminInfo)
      return admin.token || ''
    }
  } catch (e) {
    console.warn('获取管理员token失败:', e)
  }
  return ''
}

/**
 * 获取当前管理员role
 * @returns number
 */
export function getAdminRole(): number {
  try {
    const adminInfo = localStorage.getItem('adminInfo')
    if (adminInfo) {
      const admin = JSON.parse(adminInfo)
      return admin.role || 0
    }
  } catch (e) {
    console.warn('获取管理员role失败:', e)
  }
  return 0
}

/**
 * 获取当前管理员ID
 * @returns number | null
 */
export function getAdminId(): number | null {
  try {
    const adminInfo = localStorage.getItem('adminInfo')
    if (adminInfo) {
      const admin = JSON.parse(adminInfo)
      return admin.userId || null
    }
  } catch (e) {
    console.warn('获取管理员ID失败:', e)
  }
  return null
}

/**
 * 清除管理员认证信息
 */
export function clearAdminAuth(): void {
  localStorage.removeItem('adminInfo')
  localStorage.removeItem('adminExpire')
  
  // 通知可能的 store 更新
  // 使用自定义事件来通知其他组件认证状态已变更
  window.dispatchEvent(new CustomEvent('admin-auth-cleared'))
}

/**
 * 重定向到管理员登录页
 */
export function redirectToAdminLogin(): void {
  // 动态导入ElMessage避免循环依赖
  import('element-plus').then(({ ElMessage }) => {
    ElMessage.warning('管理员登录状态已失效，请重新登录')
  }).catch(() => {
    console.log('管理员登录状态已失效，请重新登录')
  })
  
  // 清除认证信息
  clearAdminAuth()
  // 跳转到管理员登录页
  window.location.href = '/admin/login'
}

/**
 * 检查是否为有效的管理员角色
 * @returns boolean
 */
export function isValidAdminRole(): boolean {
  return getAdminRole() === 1
}
